#include <iostream>
#include <thread>
using namespace std;



void printMessage(int count){
    cout << "current thread is " << this_thread::get_id()<< endl;
    for(int i=0;i<count;i++){
        cout << "hello:"<< (i+1)<< endl;
    }
}


void thread_test(){
    
    std::thread t(printMessage,10);

    std::chrono::duration<int,std::milli> d(500);
    std::this_thread::sleep_for(d);

    t.join();
    
}




// 一个简单的函数，作为线程的入口函数
void foo(int Z) {
    for (int i = 0; i < Z; i++) {
        cout << "线程使用函数指针作为可调用参数\n";
    }
}

// 可调用对象的类定义
class ThreadObj {
public:
    void operator()(int x) const {
        for (int i = 0; i < x; i++) {
            cout << "线程使用函数对象作为可调用参数\n";
        }
    }
};

void thread_test2() {
    cout << "线程 1 、2 、3 独立运行" << endl;

    int c=1456;

    // 使用函数指针创建线程
    thread th1(foo, 3);

    // 使用函数对象创建线程
    thread th2(ThreadObj(), 3);

    // 使用 Lambda 表达式创建线程
    thread th3([&c](int x) {
        int * p = &c;
        *p=99;
        for (int i = 0; i < x; i++) {
            
            cout << "线程使用 lambda 表达式作为可调用参数\n"<<c<<endl;
        }
    }, 3);

    // 等待所有线程完成
    th1.join(); // 等待线程 th1 完成
    th2.join(); // 等待线程 th2 完成
    th3.join(); // 等待线程 th3 完成

    cout << "c:" << c << endl;

}